extract reusable components